# Importar las librerÃas necesarias
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px
# Cargar los archivos .TXT con el delimitador correcto
assay = pd.read_csv(r"C:\Users\mizai\Downloads\COMPOSITACION\ASSAY.TXT", delimiter=',') # Leyes del mineral
survey = pd.read_csv(r"C:\Users\mizai\Downloads\COMPOSITACION\SURVEY.txt", delimiter=',') # Coordenadas del sondaje
header = pd.read_csv(r"C:\Users\mizai\Downloads\COMPOSITACION\HEADER.txt", delimiter=',') # Información del sondaje
# Verificamos las primeras filas de cada archivo para asegurarnos de que se cargaron correctamente
print("Datos de ASSAY:")
print(assay.head())
print("Datos de SURVEY:")
print(survey.head())
print("Datos de HEADER:")
print(header.head())
# Unir los datos de ASSAY, SURVEY y HEADER para crear un único DataFrame para análisis
# Asumimos que existe una columna 'HOLE-ID' que conecta los archivos
merged_data = pd.merge(assay, survey, on='HOLE-ID')
merged_data = pd.merge(merged_data, header, on='HOLE-ID')
# Verificamos el DataFrame combinado
print("Datos combinados:")
print(merged_data.head())
# Gráfico 3D interactivo usando Plotly
def graficar_compositos_3d(dataframe):
"""
Función para graficar los compositos en un gráfico 3D interactivo usando Plotly.
Colorea los puntos según la ley de mineral (CU).
"""
fig = px.scatter_3d(
dataframe,
x='LOCATIONX', y='LOCATIONY', z='LOCATIONZ', # Coordenadas
color='CU', # Color basado en la concentración de cobre
color_continuous_scale='Viridis', # Paleta de colores
title='Compositos de Sondajes - Concentración de Mineral (CU)',
labels={'CU': 'Ley de Cobre (%)'}
)
fig.update_layout(scene=dict(
xaxis_title='X (m)',
yaxis_title='Y (m)',
zaxis_title='Z (m)'))
fig.show()
# Llamar la función para graficar
graficar_compositos_3d(merged_data)
# Gráfico 2D con Seaborn
def graficar_mapa_calor(dataframe):
"""
Función para crear un mapa de calor de la ley de cobre en las coordenadas X y Y, coloreado por concentración.
"""
plt.figure(figsize=(10, 8))
scatter = sns.scatterplot(
data=dataframe,
x='LOCATIONX',
y='LOCATIONY',
hue='CU',
palette='coolwarm',
size='CU',
sizes=(20, 200),
legend='brief'
)
# Crear la barra de color manualmente usando el mapeo
norm = plt.Normalize(dataframe['CU'].min(), dataframe['CU'].max())
sm = plt.cm.ScalarMappable(cmap='coolwarm', norm=norm)
sm.set_array([])
plt.colorbar(sm, label='Ley de Cobre (%)') # Agregar la barra de color
plt.title('Distribución de Ley de Cobre en Coordenadas XY')
plt.xlabel('Coordenada X (m)')
plt.ylabel('Coordenada Y (m)')
plt.show()
# Llamar la función para graficar el mapa de calor
graficar_mapa_calor(merged_data)
# Gráfico adicional: Histograma de distribución de leyes
def graficar_histograma_ley(dataframe):
"""
Función para crear un histograma de la distribución de las leyes de mineral (CU).
"""
plt.figure(figsize=(10, 6))
sns.histplot(dataframe['CU'], kde=True, color='blue', bins=20)
plt.title('Distribución de Ley de Cobre')
plt.xlabel('Ley de Cobre (%)')
plt.ylabel('Frecuencia')
plt.show()
# Llamar la función para graficar el histograma
graficar_histograma_ley(merged_data)
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import tkinter as tk
from tkinter import ttk
# Función para leer los archivos de datos
def leer_datos():
"""
Función para leer los archivos de datos desde rutas especÃficas.
"""
# Leer archivos
assay = pd.read_csv(r"C:\Users\mizai\Downloads\COMPOSITACION\ASSAY.TXT", sep=',', header=0) # Leyes del mineral
survey = pd.read_csv(r"C:\Users\mizai\Downloads\COMPOSITACION\SURVEY.txt", sep=',', header=0) # Coordenadas del sondaje
header = pd.read_csv(r"C:\Users\mizai\Downloads\COMPOSITACION\HEADER.txt", sep=',', header=0) # Información del sondaje
# Unir datos por 'HOLE-ID'
merged_data = assay.merge(survey, on='HOLE-ID').merge(header, on='HOLE-ID')
return merged_data
# Función para mostrar una tabla con la información
def mostrar_tabla_compositos(dataframe):
"""
Función para mostrar una tabla con la información más importante de los compositos.
"""
# Crear una nueva ventana
ventana_tabla = tk.Tk()
ventana_tabla.title("Información de Compositos")
# Crear un Treeview para mostrar los datos
tree = ttk.Treeview(ventana_tabla)
tree['columns'] = list(dataframe.columns)
for column in tree['columns']:
tree.heading(column, text=column)
tree.column(column, anchor='center')
# Insertar los datos en el Treeview
for index, row in dataframe.iterrows():
tree.insert("", "end", values=list(row))
tree.pack(side="top", fill="both", expand=True)
ventana_tabla.mainloop()
# Función para graficar la distribución de la ley de cobre en coordenadas XY con proyección de sondajes en 3D
def graficar_distribucion_cu_3d(dataframe):
"""
Función para graficar la distribución de la ley de cobre en coordenadas XY
con proyección de sondajes en 3D.
"""
fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(111, projection='3d')
# Extraer datos
x = dataframe['LOCATIONX']
y = dataframe['LOCATIONY']
z = dataframe['CU'] # Ley de Cobre como eje Z
# Graficar la distribución de la ley de cobre
scatter = ax.scatter(x, y, z, c=z, cmap='viridis', marker='o', alpha=0.7)
# Graficar los sondajes
for index, row in dataframe.iterrows():
ax.plot([row['LOCATIONX'], row['LOCATIONX']], [row['LOCATIONY'], row['LOCATIONY']],
zs=[0, row['CU']], color='gray', alpha=0.5)
# Etiquetas y tÃtulo
ax.set_xlabel('Coordenada X (m)')
ax.set_ylabel('Coordenada Y (m)')
ax.set_zlabel('Ley de Cobre (%)')
ax.set_title('Distribución de Ley de Cobre en 3D con Proyección de Sondajes')
# Barra de colores
cbar = plt.colorbar(scatter, ax=ax, pad=0.1)
cbar.set_label('Ley de Cobre (%)')
plt.show()
# Función principal
def main():
# Leer los datos
merged_data = leer_datos()
# Llamar a la función para mostrar la tabla de compositos
mostrar_tabla_compositos(merged_data)
# Llamar a la función para graficar la distribución
graficar_distribucion_cu_3d(merged_data)
# Ejecutar la función principal
if __name__ == "__main__":
main()